#============================================================
#	Input Key
#============================================================
# 按下了按键
#============================================================
# @datetime: 2022-5-23 01:36:19
#============================================================
extends Node


signal inputted


enum InputType {
	PRESSED,
	JUST_PRESSED,
	JUST_RELEASED
}


export (InputType) var input_type = InputType.PRESSED setget set_input_type
export var action : String = ""


var _input : FuncRef


#============================================================
#   Set/Get
#============================================================
func set_input_type(value) -> void:
	input_type = value
	match input_type:
		InputType.PRESSED:
			_input = funcref(self, "__pressed__")
		InputType.JUST_PRESSED:
			_input = funcref(self, "__just_pressed__")
		InputType.JUST_RELEASED:
			_input = funcref(self, "__just_released__")


#============================================================
#   内置
#============================================================
func _ready():
	if not InputMap.has_action(action):
		set_physics_process(false)
		printerr("没有这个 Key：", action)
	set_input_type(input_type)


func _physics_process(delta):
	_input.call_func()


#============================================================
#   输入类型
#============================================================
func __pressed__():
	if Input.is_action_pressed(action):
		emit_signal("inputted")

func __just_pressed__():
	if Input.is_action_just_pressed(action):
		emit_signal("inputted")

func __just_released__():
	if Input.is_action_just_released(action):
		emit_signal("inputted")

